/**
 * author:魏康威
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Node {
	String data;
	Node next;

	Node(String data) {
		this.data = data;
	}

	@Override
	public String toString() {
		return data + "  ";
	}

}

class LinkList { // 单链表
	public Node head; // 对第一个节点的引用
	public Node current; // 对下一个节点的引用

	public void add(String data) { // 初始化每个节点
		if (head == null) { // 如果链表结构不存在
			head = new Node(data); // 初始化第一个节点
			current = head; // 引用指向本节点在只有一个节点的情况下
		} else {
			current.next = new Node(data); // 把本节点类中的成员变量next设为对下一个节点的引用
			current = current.next; // 指向下一个节点
		}
	}

	// 排序输出
	public void print(Node node) {
		if (node == null) {
			return;
		}
		while (node != null) {
			System.out.print(node);
			node = node.next; 
		}
	}

	// 定位索引的位置
	public void posIndex(int index) {
		if (head == null) {
			return;
		}
		if (index == -1) {
			return;
		}
		current = head;
		int j = 1;
		while (current != null && j < index) {
			current = current.next;
			j++;
		}
	}
	
	public Node removeNthFromEnd(Node head, int n) {

	    Node preNode = head;
	    Node curNode = head;

	    for (int i = 0; i < n; i++) {
	        curNode = curNode.next;
	        if(curNode == null) {
	        	return null;
	        }
	    }

	    while (curNode.next != null) {
	        preNode = preNode.next;
	        curNode = curNode.next;
	    }
	    preNode.next = preNode.next.next;
	    return head;
	}
	
}
public class Node_Delete_N {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("请输入链表初始化个数:");
		String init_n = br.readLine();
		int init_num = Integer.parseInt(init_n);
		LinkList list = new LinkList();
		for (int i = 1; i <= init_num; i++) {
			list.add(String.valueOf(i));
		}
		System.out.println("初始化链表为：");
		list.print(list.head);

		System.out.println("\n请输入要删除的倒数第n个结点,如果n超出链表长度则没有删除的结点");
		String end_n = br.readLine();
		int end_num = Integer.parseInt(end_n);
		list.removeNthFromEnd(list.head, end_num);
		System.out.println("刪除倒数第N个结点之后的链接为：");
		list.print(list.head);
	}	
}
